JDBC (Java Database Connectivity) API ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয় এবং এটি SQL কুয়েরি চালানোর জন্য PreparedStatement ব্যবহার করার সুযোগ প্রদান করে। IN, OUT, এবং INOUT প্যারামিটারগুলি Stored Procedures এবং PreparedStatements-এ ব্যবহৃত হয় ডেটাবেসের সাথে যোগাযোগ করার জন্য, যা SQL কুয়েরির মধ্যে প্যারামিটারিক ডেটা অন্তর্ভুক্ত করে।
- IN parameters: কেবল ইনপুট প্যারামিটার হিসেবে ব্যবহার হয় (জাভা প্রোগ্রাম থেকে ডেটাবেসে ডেটা পাঠাতে)।
- OUT parameters: কেবল আউটপুট প্যারামিটার হিসেবে ব্যবহার হয় (ডেটাবেস থেকে ফলাফল রিটার্ন করতে)।
- INOUT parameters: ইনপুট এবং আউটপুট উভয় হিসেবেই ব্যবহৃত হয় (যা ইনপুট হিসেবে পাঠানো হয় এবং পরে পরিবর্তিত হয়ে আউটপুট হিসেবে রিটার্ন হয়)।
এখানে, আমরা IN, OUT, এবং INOUT প্যারামিটারগুলির ব্যবহার এবং তাদের কোড উদাহরণ দেখাব।
1. IN Parameters
IN parameters হল সেই প্যারামিটার যেগুলি PreparedStatement বা Stored Procedure-এ ডেটাবেসে পাঠানোর জন্য ব্যবহৃত হয়। সাধারণত IN parameters এর মাধ্যমে আমরা SQL কুয়েরি বা স্টোরড প্রোসিজারের ইনপুট ডেটা প্রদান করি।
উদাহরণ:
যদি আমরা একটি PreparedStatement ব্যবহার করি, যেখানে একটি IN parameter হিসাবে id পাঠানো হচ্ছে:
import java.sql.*;
public class JdbcInParameterExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try {
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT name, age FROM employees WHERE id = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
// IN parameter সেট করা
stmt.setInt(1, 101); // প্রথম প্যারামিটার (id) 101 হিসেবে সেট করা
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("Name: " + name + ", Age: " + age);
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
এখানে, id হল IN parameter এবং এটি PreparedStatement এর মাধ্যমে SQL কুয়েরিতে পাঠানো হয়েছে। stmt.setInt(1, 101) ব্যবহার করে IN parameter কে সেট করা হয়েছে।
2. OUT Parameters
OUT parameters হল সেই প্যারামিটার যেগুলি স্টোরড প্রোসিজার থেকে আউটপুট হিসেবে ডেটা ফেরত নিয়ে আসে। আপনি CallableStatement ব্যবহার করে OUT parameters সংগ্রহ করতে পারেন।
উদাহরণ:
ধরা যাক, একটি স্টোরড প্রোসিজার রয়েছে যা OUT parameter হিসেবে একটি total_salary রিটার্ন করে:
DELIMITER
DELIMITER ;
এখন, Java কোডে এই স্টোরড প্রোসিজার কল করা হবে:
import java.sql.*;
public class JdbcOutParameterExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try {
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "{CALL GetTotalSalary(?, ?)}";
CallableStatement stmt = conn.prepareCall(sql);
// IN parameter সেট করা
stmt.setInt(1, 101); // Employee ID
// OUT parameter সেট করা
stmt.registerOutParameter(2, Types.DECIMAL); // Total salary as OUT parameter
stmt.execute();
// OUT parameter থেকে মান রিট্রাইভ করা
double totalSalary = stmt.getDouble(2);
System.out.println("Total Salary: " + totalSalary);
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
এখানে, stmt.registerOutParameter(2, Types.DECIMAL) দ্বারা OUT parameter রেজিস্টার করা হয়েছে এবং stmt.getDouble(2) এর মাধ্যমে আউটপুট ডেটা পাওয়া যাচ্ছে।
3. INOUT Parameters
INOUT parameters হল প্যারামিটার যেগুলি ইনপুট হিসেবে ডেটা গ্রহণ করে এবং পরবর্তীতে আউটপুট হিসেবে ফলাফল প্রদান করে। আপনি CallableStatement ব্যবহার করে এই প্যারামিটারটি সেট করতে পারেন। এটি IN এবং OUT উভয় হিসেবে কাজ করে।
উদাহরণ:
ধরা যাক, একটি স্টোরড প্রোসিজার রয়েছে যা একটি INOUT parameter ব্যবহার করে। এই প্রোসিজারটি ইনপুট হিসাবে একটি বোনাসের মান নেয় এবং সঠিকভাবে তার সাথে salary যোগ করে আউটপুট প্রদান করে।
DELIMITER
DELIMITER ;
Java কোডের মাধ্যমে INOUT parameter ব্যবহার করা হবে:
import java.sql.*;
public class JdbcInOutParameterExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try {
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "{CALL UpdateSalary(?, ?)}";
CallableStatement stmt = conn.prepareCall(sql);
// INOUT parameter সেট করা
stmt.setInt(1, 101); // Employee ID
stmt.setDouble(2, 5000.0); // Initial salary
// INOUT parameter রেজিস্টার করা
stmt.registerOutParameter(1, Types.INTEGER); // Employee ID (INOUT)
stmt.registerOutParameter(2, Types.DECIMAL); // Salary (INOUT)
stmt.execute();
// INOUT parameter থেকে মান রিট্রাইভ করা
int empId = stmt.getInt(1); // Get the updated employee ID
double updatedSalary = stmt.getDouble(2); // Get the updated salary
System.out.println("Employee ID: " + empId);
System.out.println("Updated Salary: " + updatedSalary);
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
এখানে, INOUT parameter হিসেবে emp_id এবং salary দুটি প্যারামিটার ব্যবহৃত হচ্ছে। এই প্যারামিটারগুলির মান ইনপুট হিসেবে পাঠানো হচ্ছে এবং প্রোসিজারের মাধ্যমে আউটপুট হিসেবে পরিবর্তিত মান ফিরে আসছে।
Conclusion
IN, OUT, এবং INOUT parameters JDBC-তে ডেটাবেসের সাথে যোগাযোগ করার সময় খুবই গুরুত্বপূর্ণ ভূমিকা পালন করে। IN parameters ব্যবহার করে আপনি ইনপুট ডেটা পাঠাতে পারেন, OUT parameters ব্যবহার করে আপনি ডেটাবেস থেকে আউটপুট ডেটা ফেরত পেতে পারেন এবং INOUT parameters ব্যবহার করে আপনি ডেটা প্রক্রিয়া করার পর আউটপুট হিসেবে ফেরত পেতে পারেন। JDBC তে CallableStatement ব্যবহার করে এগুলি কার্যকরভাবে ব্যবহৃত হয়।
Read more